/**
 * WeakSet
 * - 只能存放对象，不能存放基本数据类型
 * - 对对象是一个弱引用
 * - add/delete/has
 * - 不能遍历
 */
const obj = {}
const set = new WeakSet()
set.add(obj)

//应用场景
/**
 * 应用场景比较少，平时开发用的少
 * 有些场景的obj对象，使用set是构建强引用，要销毁obj只使用obj=null还不行，因为还有set在引用
 * 这时使用WeakSet就很方便
 */
const personSet = new WeakSet()

class Person {
  constructor(name) {
    this.name = name
    personSet.add(this)
  }
  
  running() {
    if (!personSet.has(this)) {
      throw new Error("you can't call this method via call/apply")
    }
    console.log(this.name + ' is running')
  }
}

const p = new Person('lijing')
p.running()
p.running.call('jj')

//如果有需要要销毁p，只需要 p=null 就可以
